package com.agile.leetcode.easy.dominantIndex;

/**
 * 在一个给定的数组nums中，总是存在一个最大元素 。
 * <p>
 * 查找数组中的最大元素是否至少是数组中每个其他数字的两倍。
 * <p>
 * 如果是，则返回最大元素的索引，否则返回-1。
 * <p>
 * 示例 1:
 * <p>
 * 输入: nums = [3, 6, 1, 0]
 * 输出: 1
 * 解释: 6是最大的整数, 对于数组中的其他整数,
 * 6大于数组中其他元素的两倍。6的索引是1, 所以我们返回1.
 * <p>
 * <p>
 * <p>
 * 示例 2:
 * <p>
 * 输入: nums = [1, 2, 3, 4]
 * 输出: -1
 * 解释: 4没有超过3的两倍大, 所以我们返回 -1.
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/largest-number-at-least-twice-of-others
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * @Author KD
 * @Date 2021/2/7 9:25
 */
public class DominantIndex {
    public static void main(String[] args) {
        DominantIndex dominantIndex = new DominantIndex();
        int[] nums = {3, 6, 1, 0};
        System.out.println(dominantIndex.dominantIndex_2(nums));
    }

    public int dominantIndex(int[] nums) {
        if (nums.length == 1) return 0;
        // 定义临时最大值
        int max = Integer.MIN_VALUE;
        int temp = Integer.MIN_VALUE;
        int lastTemp = Integer.MIN_VALUE;
        // 记录坐标
        int j = -1;
        // 遍历数组
        for (int i = 0; i < nums.length - 1; i++) {
            int tempMax = Math.max(nums[i], nums[i + 1]);
            int temMin = Math.min(nums[i], nums[i + 1]);
            if (lastTemp < temMin) {
                lastTemp = temMin;
            }
            if (lastTemp < tempMax) {
                lastTemp = tempMax;
            }
            if (temp < tempMax) {
                lastTemp = temp;
                temp = tempMax;
            }
            if (temp > max) {
                max = temp;
                if (temp == nums[i]) {
                    j = i;
                } else {
                    j = i + 1;
                }

            }
        }
        if (max >= 2 * lastTemp) {
            return j;
        } else {
            return -1;
        }
    }

    public int dominantIndex_2(int[] nums) {
        int maxIndex = 0;
        // 先找到索引
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] > nums[maxIndex]) {
                maxIndex = i;
            }
        }
        // 遍历循环
        int maxNum = nums[maxIndex];
        for (int num : nums) {
            if (num == maxNum) continue;
            if (num * 2 > maxNum) return -1;
        }
        return maxIndex;
    }
}
